package Z.dailyExercise.holiday;

import java.util.*;

public class _剑指Offer61扑克牌中的顺子 {

    /**
     * 自解：因为大小王可以充当任何数字 所以首先进行排序 判断有几个大小王
     * 再判断后面的数字
     * @param nums
     * @return
     */
    public boolean isStraight(int[] nums) {

        Arrays.sort(nums);
        int count =0;
        for (int i=nums.length-1;i>=0;i--){
            if (nums[i] == 0){
                count= i+2;
                break;
            }
        }

        return helper(nums,count);

    }

    public boolean helper(int[] nums,int count){
        Map<Integer,Integer> map = new HashMap<>();

        int key = nums[count];
        for (int i=0;i<5;i++){
            map.put(key,0);
            key++;
        }

        for (int num:nums){
            if (num == 0){
                continue;
            }


            if (map.containsKey(num)){
                if (map.get(num) != 0){
                    return false;
                }
                map.put(num,num);

            }else {
                return false;
            }
          
        }

        return true;

    }
    /**
     * 题解：能构成顺子，条件，除了大小王以外
     * 无重复  && max-min<5
     * 利用hashset潘重复
     */
    public boolean isStraight1(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        int max=0,min=14;
        for (int n: nums){
            if (n==0){
                continue;
            }
            if (set.contains(n)){
                return false;
            }

            set.add(n);
            max = Math.max(max,n);
            min = Math.min(min,n);
        }

        return max-min<5;
    }

}
